
// 请求
let baseURL = '';
const request = {
    invoke(args:any) {
        // args.url = baseURL + args.url;
        // https
        if (!args.url.startsWith("http")) {
            // 确保args.header已定义
            if (!args.header) {
                args.header = {}; // 初始化为一个空对象
            }
        } else {
            // 确保args.header已定义
            if (!args.header) {
                args.header = {}; // 初始化为一个空对象
            }
        }
    },
    fail() {
        uni.showToast({title: '网络错误，换个网络试试', icon: 'none', mask: true})
    }
};
uni.addInterceptor("request", request);
uni.addInterceptor("uploadFile", request);

/**
 * 发起网络请求的函数封装
 *
 * @param {Object} options - 请求配置项，包含以下属性：
 * @param {boolean} [options.loading=false] - 是否显示加载指示器。
 * @param {boolean} [options.notToken=false] - 是否在请求头中排除Token信息。
 * @param {string} [options.title] - 加载时的文案
 */
export default (options: any) => {
    return new Promise((resolve, reject) => {
        if (options.hasOwnProperty('loading') && options.loading) {
            uni.showLoading({title: options.title || "加载中",mask: true});
        }
        uni.request({
            ...options,
            success(res:any) {
                if (res.statusCode >= 200 && res.statusCode < 300) {
                    if (res.data.code === 1011008 || res.data.code === 1011004 || res.data.code === 1011009 || res.data.code === 1011006) {
                        uni.showToast({
                            icon: 'none',
                            title: res.data.message || '请求错误',
                            mask: true
                        })
                        reject(res)
                    } else {
                        resolve(res.data);
                    }
                } else {
                    if (res.statusCode === 401) {
                        uni.reLaunch({
                            url: '/pages/login/index'
                        })
                    }
                    resolve(res.data);
                }
            },
            complete() {
                if (options.hasOwnProperty('loading') && options.loading) {
                    uni.hideLoading()
                }
            },
            fail(err:any) {
                reject(err);
            },
        });
    });
};
